package com.aiiju.core.util;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion;
import org.junit.Test;

import com.bole.resumeparser.document.impl.DocumentResumeParserInterface;
import com.bole.resumeparser.exception.ResumeParseException;
import com.bole.resumeparser.html.impl.HtmlResumeParserInterface;
import com.bole.resumeparser.html.impl.LiePinResumeParser;
import com.bole.resumeparser.html.impl.ZhiLianResumeParser;
import com.bole.resumeparser.html.impl._51jobResumeParser;
import com.bole.resumeparser.models.ResumeData;
import com.bole.resumeparser.models.ResumeInformation;
import com.bole.resumeparser.models.TextResumeData;
import com.ibm.icu.impl.TextTrieMap;

public class txtParse {
	
	/**
	 * 转成文本内容
	 * @Description:
	 * @throws Exception
	 * @author: tianming
	 * @time:2017年11月13日 上午10:06:40
	 */
	@Test
	public void testParse() throws Exception {
		
		ResumeInformation resumeInfo = new ResumeInformation();
		resumeInfo.setSource("others");
		resumeInfo.setType("txt");
		resumeInfo.setText("﻿\r\n" + 
				"\r\n" + 
				"王剑锋  \r\n" + 
				"如果有一件事是我做得好的，我想大概就是编程了  \r\n" + 
				"Java开发工程师 · 厦门松霖科技有限公司  \r\n" 
				);
		
		String person = this.getPerson(resumeInfo);
		System.err.println(person);
		
	}
	
	@Test
	public void testcParse() throws Exception {
		String str = "﻿\r\n" + 
				"\r\n" + 
				"王剑锋  \r\n" + 
				"如果有一件事是我做得好的，我想大概就是编程了  \r\n" + 
				"Java开发工程师 · 厦门松霖科技有限公司  \r\n" + 
				"  男  ︳本科 ︳  ︳ 厦门   \r\n" + 
				"13074878309 ︳wangjf_ff@163.com  \r\n" + 
				"\r\n" + 
				"\r\n" + 
				" 工作经历   \r\n" + 
				"厦门松霖科技有限公司  \r\n" + 
				"\r\n" + 
				"Java开发工程师  \r\n" + 
				"2014.06-至今  \r\n" + 
				"1.对公司OA系统进行维护和新功能开发。  \r\n" + 
				"2.把OA系统与公司商城对接，处理相关后勤业务。  \r\n" + 
				"3.公司项目后台采用的SSH框架，用到工作流JBPM，前端主要采用dhtmlx插件。  \r\n" + 
				"4.工作接触到的技术有css、ajax、dwr、jQuery、xml和json解析等，为公司服务器做过集群，对Oracle做过简单调优。  \r\n" + 
				"\r\n" + 
				"\r\n" + 
				"\r\n" + 
				" 教育经历  \r\n" + 
				"\r\n" + 
				"东华理工大学 \r\n" + 
				"\r\n" + 
				"\r\n" + 
				"本科 · 软件工程 \r\n" + 
				"2015年毕业  \r\n" + 
				"\r\n" + 
				"\r\n" + 
				" 项目经验  \r\n" + 
				"品牌电商系统 \r\n" + 
				"\r\n" + 
				"设计、开发  \r\n" + 
				"2015.04-2015.12  \r\n" + 
				"1.与公司商城对接 \r\n" + 
				"2.把商城订单抓取到本系统，完成出货、稽查、放行等后勤操作 \r\n" + 
				"3.把相应数据回写入商城和SAP系统 \r\n" + 
				"工务需求管理 \r\n" + 
				"\r\n" + 
				"设计、开发  \r\n" + 
				"2014.07-2015.09  \r\n" + 
				"公司各部门员工可以创建工务需求单，工务人员根据需求单进行相应的维护，以此来提高工务的工作效率，用JfreeChart做了报表展示。 \r\n" + 
				"品牌折扣店系统 \r\n" + 
				"\r\n" + 
				"设计、开发  \r\n" + 
				"2014.12-2015.01  \r\n" + 
				"本系统主要为iPad端下单和电脑结算两部分，销售人员陪同顾客选购商品，并在iPad下单，顾客选购完毕，去收银台付款，等候提货。 \r\n" + 
				"\r\n" + 
				"\r\n" + 
				" 自我描述  \r\n" + 
				"1.本人性格开朗，热情，有较好的沟通和协调能力，能快速融入开发团队。 \r\n" + 
				"2.热爱编程，对开发工作抱有很大的热忱。 \r\n" + 
				"3.有较好的自学和解决问题能力。 \r\n" + 
				"\r\n" + 
				"\r\n" + 
				" 期望工作  \r\n" + 
				"java工程师  ，  全职  ，  北京  ，  10k-15k   \r\n" + 
				"\r\n" + 
				"\r\n" + 
				"\r\n" + 
				" 技能评价  \r\n" + 
				"SSH \r\n" + 
				"■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 掌握 \r\n" + 
				"oracle \r\n" + 
				"■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 熟悉 \r\n" + 
				"Java \r\n" + 
				"■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 掌握 \r\n" + 
				"javascript \r\n" + 
				"■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 掌握";
		new txtParse().parseTxt(str);
	}
	
	public String parseTxt(String context) throws Exception {
		
		ResumeInformation resumeInfo = new ResumeInformation();
		resumeInfo.setSource("others");
		resumeInfo.setType("txt");
		resumeInfo.setText(context);
		
		String person = this.getPerson(resumeInfo);
		System.err.println(person);
		return person;
	}
	
	public TextResumeData parseObj(String context) throws Exception {
		
		ResumeInformation resumeInfo = new ResumeInformation();
		resumeInfo.setSource("others");
		resumeInfo.setType("txt");
		resumeInfo.setText(context);
		
		 TextResumeData obj = this.getObj(resumeInfo);
		System.err.println(obj);
		return obj;
	}
	
	@Test
	public void zhiLianParse() throws Exception {
		ResumeInformation resumeInfo = new ResumeInformation();
		resumeInfo.setSource("zhilian");
		resumeInfo.setType("doc");
		
		// 文本内容需要进行研究
		resumeInfo.setText("");
		
		String person = this.getPerson(resumeInfo);
		System.err.println(person);
	}
	
	public String getPerson(ResumeInformation resumeInfo) throws ResumeParseException, JsonGenerationException, JsonMappingException, IOException {
		try{
			String text = resumeInfo.getText();
//			text = new String(text.getBytes("ISO-8859-1"),"utf-8");
			String source = resumeInfo.getSource();
			String type = resumeInfo.getType();
			
			HtmlResumeParserInterface parser = null;
			ResumeData re=new ResumeData();
			
			String jsonValue = "";
			
			if("html".equals(type)){
				switch(source){
				case "zhilian":
					parser = new ZhiLianResumeParser(text,"","");            		
					break;
				case "51job":
					parser=new _51jobResumeParser(text,"","");
					break;
				case "liepin":
					parser = new LiePinResumeParser(text,"",""); 
					break;
				}
				re=parser.parse();
				
				ObjectMapper mapper = new ObjectMapper();
				mapper.getSerializationConfig().setSerializationInclusion(Inclusion.NON_NULL);
				jsonValue = mapper.writeValueAsString(re);
//		    	jsonValue = jsonValue.replaceAll("\"_id\":\\{.*?\\}", "\"id\":\""+re.get_id().toString()+"\"");
			}else{
				DocumentResumeParserInterface docparser = null;
				TextResumeData textre = new TextResumeData();
				
				ArrayList<String> resumeContentList = new ArrayList<String>();
				String[] lines = text.split(System.getProperty("line.separator"));
				for(int i=0;i<lines.length;i++){
					String line = lines[i];
					line = line.replaceAll("\u00A0", " ").replaceAll("\u3000", " ").trim();
		        	line = line.replaceAll("：", ":");
					resumeContentList.add(line);
				}
				switch(source){
				case "zhilian":
					docparser = new com.bole.resumeparser.document.impl.ZhiLianResumeParser(resumeContentList);
					break;
				case "51job":
					docparser = new com.bole.resumeparser.document.impl._51jobResumeParser(resumeContentList);
					break;
				case "liepin":
					docparser = new com.bole.resumeparser.document.impl.LiepinResumeParser(resumeContentList);
					break;
				default:
					docparser = new com.bole.resumeparser.document.impl.TextResumeParser(resumeContentList);
					break;
				}
				textre=docparser.parse();
				
				ObjectMapper mapper = new ObjectMapper();
				mapper.getSerializationConfig().setSerializationInclusion(Inclusion.NON_NULL);
				jsonValue = mapper.writeValueAsString(textre);
			}
			
			String result = jsonValue;
			return result;
//			String response = new String(jsonValue.getBytes("utf-8"),"ISO-8859-1");
//			String result=response;
//			return result;
		}catch(Exception e){
			return "{\"status\":\"failed\"}";
		}
		
	}
	public TextResumeData getObj(ResumeInformation resumeInfo) throws ResumeParseException, JsonGenerationException, JsonMappingException, IOException {
		try{
			String text = resumeInfo.getText();
//			text = new String(text.getBytes("ISO-8859-1"),"utf-8");
			String source = resumeInfo.getSource();
			String type = resumeInfo.getType();
			
			HtmlResumeParserInterface parser = null;
			ResumeData re=new ResumeData();
			
			String jsonValue = "";
			
			if("html".equals(type)){
				switch(source){
				case "zhilian":
					parser = new ZhiLianResumeParser(text,"","");            		
					break;
				case "51job":
					parser=new _51jobResumeParser(text,"","");
					break;
				case "liepin":
					parser = new LiePinResumeParser(text,"",""); 
					break;
				}
				re=parser.parse();
				
				ObjectMapper mapper = new ObjectMapper();
				mapper.getSerializationConfig().setSerializationInclusion(Inclusion.NON_NULL);
				jsonValue = mapper.writeValueAsString(re);
//		    	jsonValue = jsonValue.replaceAll("\"_id\":\\{.*?\\}", "\"id\":\""+re.get_id().toString()+"\"");
			}else{
				DocumentResumeParserInterface docparser = null;
				TextResumeData textre = new TextResumeData();
				
				ArrayList<String> resumeContentList = new ArrayList<String>();
				String[] lines = text.split(System.getProperty("line.separator"));
				for(int i=0;i<lines.length;i++){
					String line = lines[i];
					line = line.replaceAll("\u00A0", " ").replaceAll("\u3000", " ").trim();
					line = line.replaceAll("：", ":");
					resumeContentList.add(line);
				}
				switch(source){
				case "zhilian":
					docparser = new com.bole.resumeparser.document.impl.ZhiLianResumeParser(resumeContentList);
					break;
				case "51job":
					docparser = new com.bole.resumeparser.document.impl._51jobResumeParser(resumeContentList);
					break;
				case "liepin":
					docparser = new com.bole.resumeparser.document.impl.LiepinResumeParser(resumeContentList);
					break;
				default:
					docparser = new com.bole.resumeparser.document.impl.TextResumeParser(resumeContentList);
					break;
				}
				textre=docparser.parse();
				
				return textre;
				
			/*	ObjectMapper mapper = new ObjectMapper();
				mapper.getSerializationConfig().setSerializationInclusion(Inclusion.NON_NULL);
				jsonValue = mapper.writeValueAsString(textre);*/
			}
			
		/*	String result = jsonValue;
			return result;*/
//			String response = new String(jsonValue.getBytes("utf-8"),"ISO-8859-1");
//			String result=response;
//			return result;
		}catch(Exception e){
//			return "{\"status\":\"failed\"}";
			return null;
		}
		return null;
		
	}

}
